/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache license, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the license for the specific language governing permissions and * limitations under the license. */ package org.apache.logging.log4j.io; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.junit.LoggerContextRule; import org.apache.logging.log4j.test.appender.ListAppender; import org.apache.logging.log4j.util.Strings; import org.h2.jdbcx.JdbcDataSource; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; public class LoggerPrintWriterJdbcH2Test { @ClassRule public static LoggerContextRule context = new LoggerContextRule("log4j2-jdbc-driver-manager.xml"); private static final String H2_URL = "jdbc:h2:mem:Log4j"; private static final String PASSWORD = Strings.EMPTY; private static final String USER_ID = "sa"; private ListAppender listAppender; private PrintWriter createLoggerPrintWriter() { return IoBuilder.forLogger(context.getLogger()).setLevel(Level.ALL).buildPrintWriter(); } private ListAppender getListAppender() { return listAppender; } protected Connection newConnection() throws SQLException { return DriverManager.getConnection(H2_URL, USER_ID, PASSWORD); } private void setListAppender(final ListAppender listAppender) { this.listAppender = listAppender; } @Before public void setUp() throws Exception { this.setListAppender(context.getListAppender("List").clear()); Assert.assertEquals(0, this.getListAppender().getMessages().size()); } @Test @Ignore("DataSource#setLogWriter() has no effect in H2, it uses its own internal logging and an SLF4J bridge.") public void testDataSource_setLogWriter() throws SQLException { final JdbcDataSource dataSource = new JdbcDataSource(); dataSource.setUrl(H2_URL); dataSource.setUser(USER_ID); dataSource.setPassword(PASSWORD); dataSource.setLogWriter(createLoggerPrintWriter()); // dataSource.setLogWriter(new PrintWriter(new OutputStreamWriter(System.out))); try (final Connection conn = dataSource.getConnection()) { conn.prepareCall("select 1"); } Assert.assertTrue(this.getListAppender().getMessages().size() > 0); } @Test public void testDriverManager_setLogWriter() throws SQLException { DriverManager.setLogWriter(createLoggerPrintWriter()); // DriverManager.setLogWriter(new PrintWriter(new OutputStreamWriter(System.out))); try (final Connection conn = this.newConnection()) { conn.rollback(); } finally { DriverManager.setLogWriter(null); } Assert.assertTrue(this.getListAppender().getMessages().size() > 0); } }